package com.cskaoyan.util;

import com.cskaoyan.mapper.UserMapper;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.InvocationHandler;
import org.apache.ibatis.session.SqlSession;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ProxyUtil {

    public static <T> T getServiceProxy(T t){
        Class<?> clazz = t.getClass();
        T proxy = (T) Enhancer.create(clazz, new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                //获得该类的实例
                SqlSession sqlSession = MyBatisUtil.getSqlSession();
                //反射
                Field[] declaredFields = clazz.getDeclaredFields();
                // 参考说明补充以下的代码
                // 获得UserMapper成员变量
                // 通过SqlSession和Mapper的class获得Mapper实例
                // 给UserMapper这个成员变量赋值（通过反射）
                // 通过反射执行Service中的方法
                Object invoke = null;
                //提交事务，关闭SqlSession
                sqlSession.commit();
                sqlSession.close();
                return invoke;
            }
        });
        return proxy;
    }
}
